export default {
  // state 表示的是数据（购物车数据，是数组的结构）
  state: {
    cart: [
      {
        id: 1,
        title: '商品标题',
        img: '图片',
        price: 99.99,
        amount: 2,
        desc: '商品描述信息',
        checked: false
      }
    ]
  },
  // 唯一更新 state 的地方
  mutations: {
    /**
     * 添加选购商品到购物车数组中
     * @param state 状态，就是对模块内部 state 的引用
     * @param payload 有效载荷，是需要从外部额外传递到 mutation 中更新 state 的数据
     */
    addToCart (state, payload) {
      // Array.prototype.some() 判断数组中是否有元素满足测试条件
      // Array.prototype.map() 遍历迭代数组每个元素，返回一个新数组，新数组中的元素值为回调函数的返回值
      // 判断在购物车数组中是否存在当前选购的商品
      const has = state.cart.some(prod => prod.id === payload.id)
      if (has) { // 存在，则叠加数量
        state.cart = state.cart.map(prod => {
          if (prod.id === payload.id) {
            prod.amount += payload.amount
          }
          return prod
        })
      } else { // 不存在，则添加到数组中
        state.cart = [
          ...state.cart,
          // 复制 state.cart 数组中的元素到新数组中，这种复制为 浅复制   Object.assign({}, obj)
          // JSON.parse(JSON.stringify(obj)) -- 深克隆
          payload
        ]
      }
    }
    /**
     * 删除购物车中指定的某商品
     */
    /**
     * 修改购物车中指定商品的数量
     */
    /**
     * 清空购物车
     */
    /**
     * 切换选中
     */
  },
  actions: {},
  getters: { // 相当于组件的 computed 计算属性
    totalCount (state) {
      // state.cart.reduce((sum, curr) => (sum += curr.amount), 0)
      return state.cart.reduce((sum, curr) => {
        sum += curr.amount
        return sum
      }, 0)
    }
  }
}
